home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Priklady / Priklad 37 / B / DETECT37.ASM next >
Assembly Source File  |  2000-08-14  |  3KB  |  112 lines

  1.  
  2. .386p
  3. .MODEL FLAT,STDCALL
  4. locals
  5. jumps
  6. UNICODE=0
  7. include w32.inc
  8.  
  9.  
  10. Extrn SetUnhandledExceptionFilter : PROC
  11.  
  12. Interrupt      equ 5                            ;cislo prerusenia, cisla 1 alebo 3 stazia debugovanie
  13.  
  14. .DATA
  15.  
  16. sprava1        db "Ukazka prepnutia do RING0 pomocou IDT (EliCZ's method)",0
  17. sprava2        db "Nastala chyba",0
  18. sprava3        db "RING0 bol uspesne aktivovany",0
  19. odlozESP       dd 0                             ;sem uklada register ESP
  20. predchadzajuca dd 0                             ;sem uklada adresu predchadzajucej obsluhy SEH
  21.  
  22.  
  23.  
  24. .CODE
  25. Start:
  26.  
  27. ;----------------------------------------------------------------------------
  28. ;NASTAVI SEH PRE PRIPAD CHYBY
  29. ;----------------------------------------------------------------------------
  30.                 mov  [odlozESP],esp
  31.                 push offset chyba
  32.                 call SetUnhandledExceptionFilter
  33.                 mov  [predchadzajuca], eax
  34. ;----------------------------------------------------------------------------
  35.  
  36.                 push edx
  37.                 sidt [esp-2]                    ;nacita IDT do stacku
  38.                 pop  edx
  39.  
  40.                 add  edx,(Interrupt*8)+4        ;nacita vektor nami pozadovaneho prerusenia
  41.  
  42.  
  43.                 mov  ebx,[edx]
  44.                 mov  bx,word ptr [edx-4]        ;nacita adresu starej obsluhy nami pozadovaneho prerusenia
  45.  
  46.                 lea  edi,InterruptHandler
  47.                 mov  [edx-4],di
  48.                 ror  edi,16                     ;nastavi novu obsluhu prerusenia
  49.                 mov  [edx+2],di
  50.  
  51.                 push ds                         ;ulozi registre koli bezpecnosti
  52.                 push es
  53.  
  54.  
  55.                 int  Interrupt                  ;skoci do Ring0 (nami definovana nova obsluha INT 5h)
  56.  
  57.                 pop  es                         ;obnovi registre
  58.                 pop  ds
  59.  
  60.  
  61.                 mov  [edx-4],bx                 ;nastavi povodnu obsluhu prerusenia (INT 5h)
  62.                 ror  ebx,16
  63.                 mov  [edx+2],bx
  64.  
  65.  
  66.  
  67.  
  68. ;----------------------------------------------------------------------------
  69. ;NASTAVI PREDCHADZAJUCU OBSLUHU SEH
  70. ;----------------------------------------------------------------------------
  71.                 push dword ptr [predchadzajuca]
  72.                 call SetUnhandledExceptionFilter
  73. ;----------------------------------------------------------------------------
  74.  
  75.                 jmp  skok                       ;skoci, ak bolo prepnutie do RING0 uspesne
  76.  
  77.  
  78.  
  79. continiue:
  80.                 call MessageBoxA,0, offset sprava2, offset sprava1,0
  81.                 call ExitProcess, -1
  82.  
  83. skok:
  84.  
  85.                 call MessageBoxA,0, offset sprava3, offset sprava1,0
  86.                 call ExitProcess, -1
  87.  
  88.  
  89.  
  90. chyba:                                          ;nova obsluha SEH pre pripad chyby
  91.  
  92.                 mov  esp, [odlozESP]
  93.                 push offset continiue
  94.                 ret
  95.  
  96.  
  97.  
  98. ;-----------------------------------------------------------------------------
  99. ;NASA NOVA OBSLUHA INT 5h (bezi v Ring0)
  100. ;-----------------------------------------------------------------------------
  101.  
  102. InterruptHandler:
  103.  
  104.                 mov  eax,dr7                    ;tato instrukcia je funkcna iba v RING0
  105.  
  106.                 iretd                           ;skok spat do RING3
  107.  
  108.  
  109.  
  110. ends
  111. end Start
  112.